'''
树与二叉树
    树是一种数据结构   比如:目录结构
    树是一种可以递归定义的数据结构
    树是由n个节点组成的集合
        如果n=0,那这是一课空树
        如果n>0,那存在1个节点作为树的根结点,其他结点可以分为m个集合,每个集合本身又是一棵树
    一些概念
        根节点,叶子节点
        树的深度(高度)
        树的度(所有节点的最大的度)
        孩子节点/父节点
        子树
'''


class Node:
    def __init__(self, name, type='dir'):
        self.name = name  # 节点名称（目录名或文件名）
        self.type = type  # 节点类型：'dir'目录 / 'file'文件
        self.children = []  # 子节点列表（该目录下的内容）
        self.parent = None  # 父节点指针（拼写错误：应为parent，不是parient）

    def __repr__(self):
        """对象表示方法：打印时直接显示节点名"""
        return self.name

class FileSystemTree:
    def __init__(self):
        # 创建根节点 '/' 并设置当前目录为根节点
        self.root = Node('/')
        self.now = self.root  # now指向当前工作目录

    def mkdir(self, name):
        """
        创建目录：
        1. 确保目录名以'/'结尾
        2. 创建新节点
        3. 添加到当前目录的子节点列表
        4. 设置父节点指针
        """
        if name[-1] != '/':
            name += '/'  # 补全目录结尾符
        node = Node(name)
        self.now.children.append(node)
        node.parent = self.now  # 设置父节点（修复：原代码有拼写错误）

    def ls(self):
        """列出当前目录内容（子节点列表）"""
        return self.now.children

    def cd(self, name):
        """
        切换当前目录：
        1. 如果输入'../'，返回父目录
        2. 否则在子目录中查找匹配项
        3. 找到则切换，否则报错
        """
        if name == '../':
            if self.now.parent:  # 防止根目录的父节点为None
                self.now = self.now.parent
            return

        # 确保比较格式一致
        if name[-1] != '/':
            name += '/'

        for child in self.now.children:
            if child.name == name:
                self.now = child  # 切换当前目录到子节点（修复：原代码错误为self.name）
                return

        raise ValueError('invalid dir')


# === 代码执行流程 ===
tree = FileSystemTree()  # 初始化文件系统，创建根节点'/'

# 在根目录下创建三个子目录
tree.mkdir('var/')  # 创建 var/（无需补全）
tree.mkdir('bin')  # 创建 bin/（自动补全）
tree.mkdir('usr')  # 创建 usr/（自动补全）

# 切换到 bin/ 目录
tree.cd('bin')  # 切换到 bin/ 目录（自动补全路径）

# 在 bin/ 目录下创建 python/ 子目录
tree.mkdir('python')  # 创建 python/ 子目录

# 列出当前目录（bin/）的内容
print(tree.ls())  # 输出：[python/]

# === 当前内存结构示意图 ===
"""
根节点：/
├─ var/
├─ bin/
│   └─ python/   ← 当前目录(now)
└─ usr/
"""
